--- title: "01-平方矩阵 I" created: 2025-12-02 tags: - 项目 aliases: - 平方矩阵 I --- # 平方矩阵 I ## 题目 [平方矩阵 I](https://www.acwing.com/problem/content/755/) ![[image-c42c5fbd.png]] ## 思路分析 对于奇数:每一圈距离中心点的距离相等; 中心点 - 横纵坐标中的最大值 对于偶数: `a[i][j] = n / 2 - max(min(abs(i - n / 2), abs(i - (n - 1) / 2)), min(abs(j - n / 2), abs(j - (n - 1) / 2)));` 比奇数多了一个判断`min(abs(i - n / 2), abs(i - (n - 1) / 2))` 规律是每个数等于它到上下左右四条边的距离的最小值。 ## 代码实现 ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { int n = sc.nextInt(); if (n == 0) break; for (int i = 0; i < n; i ++ ) { for (int j = 0; j < n; j ++ ) { int a = Math.min(i, n - 1 - i); int b = Math.min(j, n - 1 - j); System.out.printf("%d ", Math.min(a, b) + 1); } System.out.println(); } System.out.println(); } } } ``` ```java import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while(n != 0){ for (int i = 1; i <= n; i++ ) { for (int j = 1; j <= n; j++) { //拿5举例 /* i=1 j=1 j=2 j=3 j=4 j=5 a=1 n-i+1=5 b-j+1 =5 4 3 2 1; b=5 4 3 2 1; i=2 j=1 j=2 j=3 j=4 j=5 a=1 2 n-i+1=4 b=4 4 3 2 1; i=3 j=1 j=2 j=3 j=4 j=5 a=1 2 3 n-i+1=3 b=3 3 3 2 1; i=4 j=1 j=2 j=3 j=4 j=5 a=1 2 3 4 n-i+1=2 b=2 2 2 2 1; i=5 j=1 j=2 j=3 j=4 j=5 a=1 2 3 4 5 n-i+1 =1 b=1 1 1 1 1; min(a,b)=1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 */ int a = Math.min(i, j), b = Math.min(n - i + 1, n - j + 1); System.out.printf("%d ", Math.min(a, b)); } System.out.println(); } System.out.println(); n = sc.nextInt(); } } } ``` ## 同类题型 ## 视频讲解 --- **项目分区导航**: [[00-数组|数组]] ⬅️ | 01-平方矩阵 I | ➡️ [[02-数组中的行|数组中的行]]